[レポート]NoSQLの必要性と主要プロダクト比較 #dbts2015 #be_crazy_about_db_tech
超おはようございます。最近めっきり暑くなってきましたね。城内です。 今回は、db tech showcase Tokyo 2015に参加してきましたので、セッションレポートを書きたいと思います。
セッション情報
- セッション名:NoSQLの必要性と主要プロダクト比較
- スピーカー:株式会社野村総合研究所 OpenStandiaチーム 渡部 徹太郎氏
スライド
オープンソース サポート 保守 サービス(OSS サポート 保守 サービス)| OpenStandia™(オープンスタンディア)
セッション内容
データを取り巻く環境の変化
- データのボリュームが肥大化 →GoogleやFacebookの保持データがペタバイト級に
- データ処理の応答スピードが重要に →Webサイトのアクセス数が秒間10万アクセス
- データの多様性 →非構造データが増えてきているため、RDBMSでは格納が困難
RDBMSの現状
- スケーラビリティの上限に達した
- 非定型なメタデータの管理が困難に
- ビックデータ化
- データベースの変更に停止が伴っていた
- 処理に時間がかかった(例:ECサイトで商品カタログの更新に12時間)
- 商用RDBMSではスケールアップが高価すぎる
- スキーマーの再定義に工数がかかりすぎる
NoSQLの登場
NoSQLの特徴は以下の通り。
- 非構造データの取り扱いが得意
- 水平分散が得意(結果整合性)
※RDBMSは「強い整合性」を保つため、水平分散が苦手。
Hadoopとの違い
Hadoopの特徴は以下の通り。
- バッチの分散処理が得意
- 事前にデータを入れる
- 応答速度より全体の処理を優先する
NoSQLの分類
- KVS
- キーバリュー型・・・redis、memcached、Oracle Coherence、
- 列指向型ワイドカラムストア・・・Cassandra、HBASE、Cloud Datastore
- ドキュメント型・・・MongoDB、Couchbase、MarkLogic、PostgreSQL、MySQL、DynamoDB、MS-DocumentDB
- グラフ型・・・Neo4j
流行として、Hadoopはすでに旬を過ぎている。ドキュメント型、キーバリュー型が現在、グラフ型がこれから。
KVS
redis
- メリット
- redis3からシャーディングが可能に
- 配列に対するPUSH、POPが可能
- PUB、SUBが可能
- トランザクションが可能
- デメリット
- メモリサイズ以上は使えない
- ディスクへの先行書き込みはできない
- 自動負荷分散ができない
Cloud Datastore
- メリット
- データ構造でエンティティの親子関係が持てる
- 部分的なトランザクションができる →同じエンティティグループ内で可能(強い整合性) →異なるエンティティグループだと結果整合性
- デメリット
- Notは1つしかできない
- ソートが先でなければならない
HBASE
- メリット
- HDFSが必須(登場人物が多い)
- Hadoopとの相性がいい
- 強い整合性を持つ
- データ圧縮が可能
- デメリット
- 5台未満では利用できない(大規模向け)
- 単独でデプロイできない(HadoopやZookeeperなど)
cassandra
- 特徴
- DynamoDBと同じ水平分散方式
- CQLがSQLっぽく扱える
ドキュメント型
mongoDB
※小規模向け
- メリット
- SQL以上の集計クエリ(MS-DocumentDBと並び最強)
- ロールベースのアクセス管理
- 大量データの取り扱い
- リアルタイムでクエリが作成できる
- デメリット
- トランザクションができない
- マルチマスタ更新
couchbase
※大規模向け
- メリット
- マルチマスタ
- CRUDとMapReduce(事前に決めたクエリ)
- GUIコンソールが提供されている
- デメリット
- アドホッククエリ
DynamoDB
- メリット
- 最近はJSONに対応(ドライバが吸収)
- 他のAWSサービスとの連携
- デメリット
- 集計、ソート、JSONの検索ができない
- インデックスが非同期、数に制限
Microsoft DocumentDB
- メリット
- SQLライクなクエリ
- 自動インデックス作成ができる
- トランザクションサポート
- 型チェック
- デメリット
- 集計、ソートができない
- 複数インデックスができない
- Azure上でしか使用できない
■クラウドのNoSQLをどう考えるか? →できることできないことがあるので、クラウドなら必ずしもクラウドNoSQLとは言えない。
MarkLogic
- 特徴
- もともとはXML、RDFトリプル、最近JSON
- XQueryが可能
- 分類表示、ドリルダウンが可能
- トランザクション可能
- アクセス管理、監査、アラートが可能
グラフ型
Neo4j
- メリット
- ノード→関連→ノード(JSONで表現)
- Cypher
- GUIが素晴らしい
- デメリット
- 水平分散ができない
- コミュニティー版はGPLライセンス
NoSQLの見極め方
- ありがちな謳い文句はスルーでOK
- 差別化される要素
- データ構造
- アプリからのインターフェース
- トランザクション
- セカンダリインデックス、複合インデックス
- クエリ(ソート、リミット、データの部分更新、集計)
- マルチマスタレプリケーション
- アクセス権限管理
- 学習コスト(ドキュメントの量、ノウハウの多さ)
- 性能の単純比較はできない →そもそも一貫性やインターフェースが統一されていない →NoSQL性能比較レポートはあまりあてにならない(クエリによってはMySQLの方が早いことがある)
- 最新の情報を確認する
Q&A
- サポート体制について →OSSをサポートしているベンダーを頼る
- パッチの更新頻度について →ベンダーの有無による、商用側の不具合修正をコミュニティーに還元
- 製品によってそれぞれ言語が違う、RDB屋がとっつきやすいのは? →redis、mongoDBが分かりやすい、そこから他を選択するのがよいかと
感想
いままでRDBMSしか関わったことがなかったので、NoSQLは薄らしか知らなかったですが、ソフトウェアの種類も多くとても奥が深いなーと思いました。今回のセッションで、いろいろな情報が得られたので、これから自己学習で知識を深めていきたいと思います。
皆さんもNoSQL, NO LIFE的な感じでNoSQLの世界に足を踏み入れてみてはいかがでしょうか?